package com.iplatform.iplatformuser.privilege.dao;

import com.iplatform.module.sys.SysDataBean;
import com.iplatform.module.sys.dto.SysDataTypeDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * Title: SysdataMapper
 * Description:
 *
 * @author RayLLi
 * @date 2018年8月28日
 */
@Mapper
public interface SysdataMapper {

    /**
     * Title: loadData
     * Description: 获取数据字典列表
     *
     * @return
     */
    public List<HashMap<String, String>> loadData();

    /**
     * Title: querySysData
     * Description: 查询数据字典
     *
     * @param formMap
     * @return
     */
    public List<HashMap<String, String>> querySysData(Map<String, String> formMap);


    /**
     * Title: querySysData
     * Description: 查询类型代码和类型名称
     *
     * @return
     */
    public List<HashMap<String, String>> queryCodeAndName();

    /**
     * Title: insertSysData
     * Description: 添加数据字典
     *
     * @return
     */
    public int insertSysData(SysDataBean sysDataBean);

    /**
     * Title: updateSysData
     * Description: 更新数据字典
     *
     * @param formMap
     * @return
     */
    public int updateSysData(Map<String, String> formMap);

    /**
     * Title: deleteSysData
     * Description: 删除数据字典
     *
     * @param id
     * @return
     */
    public int deleteSysData(String id);

    /**
     * Title: batchDeleteSysData
     * Description: 批量删除数据字典
     *
     * @param ids
     */
    public void batchDeleteSysData(@Param("ids") List<String> ids);

    /**
     * Title: setReadOnlyStatus
     * Description: 设置只读状态
     *
     * @param id
     */
    public void setReadOnlyStatus(String id);

    /**
     * 根据类型查询字典表
     *
     * @param map
     * @return
     */
    public List<String> querySysDataByType(Map<String, String> map);

    /**
     * <p>Title: loadSycDate</p>
     * <p>Description: 获取同步数据时间</p>
     *
     * @return
     */
    public List<HashMap<String, String>> loadSycDate();

    /**
     * @param typeCode
     * @return
     */
    List<SysDataTypeDto> querySysDataByTypeCode(@Param("typeCode") String typeCode, @Param("code") String code, @Param("codeName") String codeName, @Param("dataType") String dataType);

    /**
     * 切换数据类型
     *
     * @param id
     */
    public void setDataType(@Param("id") String id, @Param("dataType") String dataType);

    /**
     * 通过数据id查询数据状态
     *
     * @param dataId
     * @return
     */
    String findDataTypeByDataId(@Param("dataId") String dataId);

    /**
     * 查出所有的数据类型和名称
     *
     * @return
     */
    List<SysDataTypeDto> findTypeCodeAndTypeName(@Param("typeName") String typeName);

    /**
     * 判断某个数据类型的数据代码是否唯一
     *
     * @return
     */
    SysDataBean isCodeExist(@Param("typeCode") String typeCode, @Param("code") String code, @Param("id") String id);

    /**
     * 查出两种排序码
     *
     * @return
     */
    List<SysDataTypeDto> findOrdNo(@Param("typeCode") String typeCode, @Param("isType") Integer isType, @Param("currentId") String currentId);

    /**
     * 获取应该修改排序码的数据id
     *
     * @param ordNo
     * @param TypeOrdNo
     * @return
     */
    List<String> findByOrdNo(@Param("typeCode") String typeCode, @Param("ordNo") BigDecimal ordNo, @Param("TypeOrdNo") BigDecimal TypeOrdNo, @Param("currentId") String currentId);

    /**
     * 数据类型的排序码+1
     *
     * @param ids
     */
    void typeOrdNoAddOne(@Param("ids") List<String> ids);

    /**
     * 数据的排序码+1
     *
     * @param ids
     */
    void ordNoAddOne(@Param("ids") List<String> ids);

    /**
     * 通过id查询数据类型名称
     *
     * @param id
     * @return
     */
    SysDataTypeDto findTypeById(@Param("id") String id);

    /**
     * 通过数据类型名称查出相关数据id的集合
     *
     * @param typeName
     * @return
     */
    List<String> findIdByType(@Param("typeName") String typeName);

    /**
     * 数据类型批量修改
     *
     * @param sysDataBean
     * @param ids
     * @return
     */
    int updateType(@Param("sysDataBean") SysDataBean sysDataBean, @Param("ids") List<String> ids);

    /**
     * 批量删除类型
     *
     * @param ids
     */
    void batchDeleteType(@Param("ids") List<String> ids);

    /**
     * 数据字典判重
     * @param typeCode
     * @param code
     * @param id
     * @return
     */
    int checkData(@Param("typeCode") String typeCode, @Param("code") String code, @Param("id") String id);
}
